package com.ck.ips.service.sys;

import com.ck.common.model.Module;
import com.ck.common.model.OperationResult;
import com.ck.ips.model.dto.sys.ModuleDTO;

import java.util.List;
import java.util.Map;

/**
 * 模块Service
 *
 */
public interface ModuleService {
	/**
	 * 保存模块
	 *
	 * @param module Module
	 */
	OperationResult saveModule(Module module);

	/**
	 * 更新模块
	 *
	 * @param module Module
	 */
	OperationResult updateModule(Module module);

	/**
	 * 通过模块名称获取模块
	 *
	 * @param moduleName 模块名称
	 * @return Module
	 */
	Module getModuleByModuleName(String moduleName);

	/**
	 * 获取模块的子模块
	 *
	 * @param moduleId 模块ID
	 * @return List<ModuleDTO>
	 */
	List<ModuleDTO> listChildrenModule(Long moduleId);


	/**
	 * 通过模块ID获取角色ID列表
	 *
	 * @param moduleId 模块ID
	 * @return List<Long>
	 */
	List<Long> listRoleIdsFromRoleModuleByModuleId(Long moduleId);

	/**
	 * 通过模块ID删除模块
	 *
	 * @param moduleId 模块ID
	 */
	OperationResult deleteModuleById(Long moduleId);

	/**
	 * 获取某个角色所拥有的菜单
	 * @param roleId
	 * @param buildTree 是否构建为树形结构
	 * @return
	 */
	List<ModuleDTO> getMenuByRoleId(Long roleId,boolean buildTree);

	/**
	 * 获取某个用户所拥有的菜单(菜单与按钮分开返回)
	 *
	 * @return
	 */
	Map<String,List<ModuleDTO>> getUserResources();

	/**
	 * 获取某个用户所拥有的资源
	 * @return
	 */
	List<ModuleDTO> listModuleByUser();

	/**
	 * 登录时获取某一个用户的所有菜单
	 * @param userId
	 * @param superUser
	 * @return
	 */
	List<ModuleDTO> listMenuByUserId(Long userId,boolean superUser);

	/**
	 * 获取某个用户所拥有的资源
	 * @param buildTree 是否构建为树形结构
	 * @return
	 */
	List<ModuleDTO> listAllModule(boolean buildTree);

	/**
	 * 资源url是否匹配
	 * @param resource 资源（通常为request uri）
	 * @return
	 */
	boolean resourceMatch(String resource);

}
